From b5b836668a03b8ba56c46ed17585b5beb51749f1 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Wed, 25 Mar 2020 14:02:59 -0700 Subject: [PATCH] muxer: force muxer dispoal as part of widget dispose We need to cleanup state here immediately so that we do not potentially access the g_class private data after it been finalized. This ensures that the borrowed reference is dropped by the muxer. --- gtk/gtkactionmuxer.c | 2 ++ gtk/gtkwidget.c | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/gtk/gtkactionmuxer.c b/gtk/gtkactionmuxer.c index 303d26e738..26ca311efc 100644 --- a/gtk/gtkactionmuxer.c +++ b/gtk/gtkactionmuxer.c @@ -858,6 +858,8 @@ gtk_action_muxer_dispose (GObject *object) g_hash_table_remove_all (muxer->observed_actions); + muxer->widget = NULL; + G_OBJECT_CLASS (gtk_action_muxer_parent_class) ->dispose (object); } diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 6d25c73357..48ead879f0 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -7357,6 +7357,11 @@ gtk_widget_dispose (GObject *object) GtkWidget *widget = GTK_WIDGET (object); GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget); GSList *sizegroups; + GtkActionMuxer *muxer; + + muxer = g_object_get_qdata (G_OBJECT (widget), quark_action_muxer); + if (muxer != NULL) + g_object_run_dispose (G_OBJECT (muxer)); if (priv->children_observer) gtk_list_list_model_clear (priv->children_observer); -- 2.30.2